What is image-size?
The image-size npm package is a module that provides a simple API to determine the dimensions of an image file. It supports a variety of image formats, including but not limited to JPEG, PNG, GIF, BMP, and WebP. The package can be used in both synchronous and asynchronous contexts and can handle local files as well as remote images via URLs.
What are image-size's main functionalities?
Synchronous image size retrieval
This feature allows you to synchronously get the dimensions of an image by providing the path to the image file.
const sizeOf = require('image-size');
const dimensions = sizeOf('path/to/image.jpg');
console.log(dimensions.width, dimensions.height);
Asynchronous image size retrieval
This feature allows you to asynchronously get the dimensions of an image by providing the path to the image file and a callback function.
const sizeOf = require('image-size');
sizeOf('path/to/image.jpg', (err, dimensions) => {
if (err) throw err;
console.log(dimensions.width, dimensions.height);
});
Image size retrieval from a buffer
This feature allows you to get the dimensions of an image from a buffer, which is useful when you have the image data in memory rather than stored in a file.
const sizeOf = require('image-size');
const fs = require('fs');
fs.readFile('path/to/image.jpg', (err, data) => {
if (err) throw err;
const dimensions = sizeOf(data);
console.log(dimensions.width, dimensions.height);
});
Other packages similar to image-size
sharp
Sharp is a high-performance Node.js image processing library that provides a wide range of functionality including resizing, cropping, rotating, and format conversion. It is faster than image-size as it's built on libvips, but it's more complex and has a larger footprint.
jimp
Jimp is an image processing library for Node.js that allows for image manipulation and conversion in pure JavaScript without any native dependencies. It offers more features than image-size, such as image manipulation, but it is slower due to its JavaScript-based implementation.
probe-image-size
Probe-image-size is a Node.js module to determine image sizes and types in a streaming fashion, which can be useful for remote images. It is similar to image-size but focuses on working with streams and can handle partial data, which is useful for getting dimensions without downloading the whole image.
image-size
A Node module to get dimensions of any image file
Supported formats
- BMP
- CUR
- DDS
- GIF
- HEIC (HEIF, AVCI, AVIF)
- ICNS
- ICO
- J2C
- JP2
- JPEG
- KTX (1 and 2)
- PNG
- PNM (PAM, PBM, PFM, PGM, PPM)
- PSD
- SVG
- TGA
- TIFF
- WebP
Programmatic Usage
npm install image-size --save
or
yarn add image-size
Synchronous
const sizeOf = require("image-size")
const dimensions = sizeOf("images/funny-cats.png")
console.log(dimensions.width, dimensions.height)
Asynchronous
const sizeOf = require("image-size")
sizeOf("images/funny-cats.png", function (err, dimensions) {
console.log(dimensions.width, dimensions.height)
})
NOTE: The asynchronous version doesn't work if the input is a Buffer. Use synchronous version instead.
Also, the asynchronous functions have a default concurrency limit of 100
To change this limit, you can call the setConcurrency
function like this:
const sizeOf = require("image-size")
sizeOf.setConcurrency(123456)
Using promises (nodejs 10.x+)
const { promisify } = require("util")
const sizeOf = promisify(require("image-size"))
sizeOf("images/funny-cats.png")
.then((dimensions) => {
console.log(dimensions.width, dimensions.height)
})
.catch((err) => console.error(err))
Async/Await (Typescript & ES7)
const { promisify } = require("util")
const sizeOf = promisify(require("image-size"))(async () => {
try {
const dimensions = await sizeOf("images/funny-cats.png")
console.log(dimensions.width, dimensions.height)
} catch (err) {
console.error(err)
}
})().then((c) => console.log(c))
Multi-size
If the target file is an icon (.ico) or a cursor (.cur), the width
and height
will be the ones of the first found image.
An additional images
array is available and returns the dimensions of all the available images
const sizeOf = require("image-size")
const images = sizeOf("images/multi-size.ico").images
for (const dimensions of images) {
console.log(dimensions.width, dimensions.height)
}
Using a URL
const url = require("url")
const http = require("http")
const sizeOf = require("image-size")
const imgUrl = "http://my-amazing-website.com/image.jpeg"
const options = url.parse(imgUrl)
http.get(options, function (response) {
const chunks = []
response
.on("data", function (chunk) {
chunks.push(chunk)
})
.on("end", function () {
const buffer = Buffer.concat(chunks)
console.log(sizeOf(buffer))
})
})
You can optionally check the buffer lengths & stop downloading the image after a few kilobytes.
You don't need to download the entire image
Disabling certain image types
const imageSize = require("image-size")
imageSize.disableTypes(["tiff", "ico"])
Disabling all file-system reads
const imageSize = require("image-size")
imageSize.disableFS(true)
JPEG image orientation
If the orientation is present in the JPEG EXIF metadata, it will be returned by the function. The orientation value is a number between 1 and 8 representing a type of orientation.
const sizeOf = require("image-size")
const dimensions = sizeOf("images/photo.jpeg")
console.log(dimensions.orientation)
Command-Line Usage (CLI)
npm install image-size --global
or
yarn global add image-size
followed by
image-size image1 [image2] [image3] ...
Credits
not a direct port, but an attempt to have something like
dabble's imagesize as a node module.